package projetolp2.Sistem;

/**
 * 
 * Meal-Points - Projeto de Laborat�rio de programacao 2 - 2011.1
 * 
 * Usuario.
 * 
 * @author Diego Tavares Felipe Travassos 
 * @author Felipe Travassos
 * @author Mayra Kelly
 *
 */

public class Usuario{
	
	private String nome;
	
	private Opiniao opiniao;
	
	/**
	 * Construtor Default de Usuario.
	 */
	
	public Usuario(){}
	
	/**
	 * 
	 * @param nome
	 *        O nome do usuario do sistema.
	 * @throws Exception
	 * 			Se o nome do Usuario for nulo ou vazio.
	 */
	
	public Usuario(String nome) throws Exception{
		
		if(nome.equals("")|| nome == null){	
		   throw new Exception("Nome do usuario nao pode ser nulo ou vazio!");
		}
		this.nome = nome;
	}
	
	/**
	 * 
	 * @param nome
	 *        O nome do usuario do sistema.
	 * @param opiniao
	 *        A opiniao do usuario do sistema.
	 * @throws Exception
	 * 				Se a opiniao do Usuario for
	 *                       nula.
	 */                     
	public Usuario(String nome, Opiniao opiniao) throws Exception{
		
		try{
		
		if(opiniao == null){
			
			throw new Exception("Opiniao do usuario nao pode ser vazio ou nulo!"); 
		}
		
		this.nome = nome;
		this.opiniao = opiniao;
		
		}catch(Exception e){
			System.err.println(e.getMessage());
		}
	}
	
	/**
	 * Recupera o nome do Usuario.
	 * 
	 * @return O nome do usuario.
	 */
	
	public String getNome() { return nome; }
	
	/**
	 * Recupera a opiniao do Usuario.
	 * 
	 * @return A opiniao do usuario
	 */
	
	public Opiniao getOpiniao(){return opiniao;}
	
	/**
	 * Troca o nome de um usuario por outro.
	 * 
	 * @param nome
	 *        O nome do usuario.
	 */
	
	public void setNome(String nome) { this.nome = nome; }
	
	/**
	 * Troca o nome de uma opiniao do Usuario por outra.
	 * 
	 * @param opiniao
	 *        A opiniao do usuario.
	 */
	public void setOpiniao(Opiniao opiniao){ this.opiniao = opiniao;}
	
	/**
	 * Testa a igualdade de um objeto com o Usuario.
	 * 
	 * @param outroUsuario
	 *       O objeto a comparar com este Usuario.
	 *       
	 * @return True se o outroUsuario for igual a este Usuario, false caso contr�rio.
	 * 
	 */

	 
	public boolean equals(Object outroUsuario){
		if(!(outroUsuario instanceof Usuario)){	
			return false;
		}
		
		Usuario novoUsuario = (Usuario) outroUsuario;
		if(novoUsuario.getNome() == getNome() && 
		novoUsuario.getOpiniao() == getOpiniao()){
		return true;
		}
	 return false;
	}
	
	/**
	 * Representa o Usuario como String.
	 * 
	 * @return Um string representando o Usuario.
	 * 
	 */
	public String toString(){
		return "Nome: "+ nome + opiniao.toString();
	}

}
